Лабораторная работа №1

Имитационное моделирование

Чистов Даниил Максимович

Российский университет дружбы народов

2026-02-21

Докладчик

  • Чистов Даниил Максимович
  • Студент
  • Третий курс
  • Российский университет дружбы народов им. П. Лумумбы

Цель работы

  • Целью данной работы является создание рабочего пространства для последующих работ, получение практических навыков с Julia и git.

Задание

  • Создать рабочий каталог для всего курса.
  • Создать рабочее пространство для программ в рамках лабораторной работы.
  • Установить необходимые пакеты.
  • Выполнить предложенный код.
  • Преобразовать код в литературный стиль.
  • Сгенерировать из литературного кода: чистый код, jupyter notebook, документацию в формате Quarto.
  • Выполнить код из jupyter notebook.
  • Интегрировать документацию в формате Quarto в отчёт.
  • Добавить в код в литературном стиле вычисление для набора параметров.
  • Сгенерировать из литературного кода: чистый код, jupyter notebook, документацию в формате Quarto.
  • Выполнить код из jupyter notebook.
  • Интегрировать документацию в формате Quarto в отчёт.

Выполнение лабораторной работы

Создание рабочего католога для всего курса

Требуется создать рабочие каталоги на двух платформах - GitVerse и GitHub. Я воспользовался шаблоном курса, создал репозитории на GitVerse, аналогично на GitHub

Созданный репозиторий на платформе GitVerse

Инициализация курса

Теперь перехожу в папку курса и инициализирую его командой make prepare.

Инициализация курса в консоли

Загрузка изменений

Загружаю изменения на сервер.

Загрузка изменений на сервер с помощью git

Отправление изменений

Отправляю изменения на обе платформы - GitHub (origin), GitVerse (simmod).

Отправление изменений на GitHub и GitVerse

Создание рабочего католога для всего курса

Изменения успешно внесены, рабочий католог курса создан.

Рабочий католог курса на платформе GitHub

Настройка git flow

По заданию курс требует git flow для работы. Инициализирую его, выбираю v, как префикс для новых версий.

Инициализация git flow

Отправление изменений

После инициализации git flow появилось разделение на ветки develop и master, нужно внести изменения на обе платформы GitHub и GitVerse. Командой git branch проверяю, что я нахожусь на ветке develop. После чего отправляю изменения на платформы.

Отправление изменений курса на платформы

Создание первого релиза

Инициализирую первый релиз - версия 1.0.0, затем командой standard-changelog –first-release создаю журнал изменений, добавляю изменения в git, создаю коммит.

Инициализация первого релиза

Создание первого релиза

Отправляю изменения на обе платформы, включая созданный тэг.

Изменения отправлены на GitHub и GitVerse

Создание первого релиза

На GitVerse самостоятельно создаю первый релиз.

Первый релиз на GitVerse

Создание первого релиза

На GitHub создаю релиз командами release create и прикрепляю журнал изменений.

Первый релиз на GitHub

Создание проекта DrWatson для лабораторных работ

Перехожу в каталог lab01, первый раз запускаю Julia, после чего командами using Pkg, Pkg.add(“DrWatson”) загружаю пакет DrWatson. Затем инициализирую проект.

Инициализация проекта с помощью DrWatson

Загрузка пакетов

Для дальнейшей работы требуется загрузить большее количество пакетов. Вместо того, чтобы делать это самостоятельно, воспользуюсь скриптом, который загрузит все требуемые пакеты. Ниже программный код данного скрипта.

Программный код для загрузки требуемых пакетов

Загрузка пакетов

Запускаю скрипт, пакеты загружены успешно.

Загрузка требуемых пакетов

Проверка пакетов

Теперь требуется проверить загруженные пакеты следующим скриптом. Перед этим, в папке scripts создаю файл, вставляю требуемый программный код проверки пакетов.

Создание скрипта для проверки пакетов

Проверка пакетов

Запускаю скрипт. Все пакеты проверены. Можно приступать к работе с ними.

Пакеты успешно проверены

Работа с моделью экспоненциального роста

  • Экспоненциальный рост — это процесс увеличения величины, при котором скорость роста в каждый момент времени пропорциональна текущему значению этой величины. Чем больше система, тем быстрее она растет.

  • В лабораторной работе требуется реализовать данную модель с помощью Julia.

Работа с моделью экспоненциального роста

Создаю скрипт 01_exponential_growth.jl, данный скрипт получит на вход один набор параметров для модели экспоненциального роста, получит решение, добавит их в таблицу, а также нарисует график.

Первая версия скрипта 01_exponential_growth.jl

Результаты работы программы

Запускаю скрипт, работа выполнено успешно, получены результаты, а также график.

Результат работы 01_exponential_growth.jl

Преобразование кода в литературный вид

Теперь требуется преобразовать программный код данного скрипта в литературный вид.

Литературное программирование

  • Литературное (грамотное) программирование — это подход, приоритизирующий понятность программы для человека, а не её исполнение компьютером. В экосистеме Julia он реализуется через несколько инструментов.

Работа с кодом в литературном виде

Преобразую код 01_exponential_growth.jl в литературный вид.

Литературный вид 01_exponential_growth.jl

Работа с кодом в литературном виде

Т. к. сама суть исполняемого кода не была изменена, результат выплонения программы такой же. Рисунок также был создан.

Результат 01_exponential_growth.jl в литературном виде

Формирование производных 01_exponential_growth

Теперь можно воспользоваться особенностями такого вида программирования. По заданию требуется создать скрипт tangle.jl, который на вход будет получать код в литературном виде, а на выходе будет производить три файла - чистый код, jupyter notebook, документацию в формате Quarto.

Создание tangle.jl

Формирование производных 01_exponential_growth

Запускаю tangle.jl, все три файла успешно созданы.

Результат работы tangle.jl

Формирование производных 01_exponential_growth

Проверим созданный Jupyter notebook. Файл открывается и успешно работает.

Проверка 01_exponential_growth в виде Jupyter notebook

Интеграция 01_exponential_growth в отчёт

Теперь требуется внести код 01_exponential_growth в отчёт. Перед этим в файл _quarto.yml добавляю код, включающий поддержку Julia.

Изменения в _quarto.yml

Интеграция 01_exponential_growth в отчёт

Затем вношу изменения в preamble.tex, также добавляя поддержку Julia.

Изменения в preamble.tex

Интеграция 01_exponential_growth в отчёт

Код успешно добавлен.

Код внутри отчёта

Реализация модели с параметрами

Теперь требуется создать новый код, вместо того, чтобы подавать один набор данных, как в 01_exponential_growth.jl, изменю программу так, чтобы подавалось несколько наборов данных. Код уже преобразован в литературный вид.

Создание 02_exponential_growth.jl

Реализация модели с параметрами

Запускаю программу, код работает успешн.

Результат работы 02_exponential_growth.jl

Реализация модели с параметрами

Программой tangle.jl создаю три файла из 02_exponential_growth.jl, среди которых Jupyter notebook. Он успешно работает.

02_exponential_growth.jl в виде Jupyter notebook

Реализация модели с параметрами

Добавлю эту программу в отчёт.

02_exponential_growth.jl внутри отчёта

Реализация модели с параметрами

Код успешно интегрирован в отчёт, его вы можете просмотреть ниже:

02_exponential_growth.jl успешно интегрирован

Выводы

В результате выполнения данной лабораторной работы, я вспомнил основные методы работы с системой Git и разными платформами, а также получил практические навыки работы с Julia.

Список литературы